home *** CD-ROM | disk | FTP | other *** search
- static char editgetch_prog[] = "@(#)int editgetch(int form)";
- static char editgetch_ver[] = "@(#)v1.50/kr ; 08.06.91";
- /* editgetch Edit_GetCHaracter - Tastendruck auswerten, bis auf Cursor
- ** links und rechts alle F-Tasten ignorieren.
- **
- ** Deklaration int editgetch(int form);
- **
- ** Version 1.50(DOS+MKS)
- ** Erstellt 08.06.91
- ** Autor Klaus Rath
- **
- ** Beschreibung 'editgetch' holt einen Tastendruck vom Benutzer ab.
- ** Wenn es eine normale Taste war, wird der ASCII-Wert
- ** der Taste zurückgegeben, ansonsten passiert werden nur die
- ** Tasten KEY_RIGHT und KEY_LEFT akzeptiert.
- ** ( Zum "Abholen" wird die Funktion getch() von Borland C++ ver-
- ** wendet, nicht die gleichnamige Funktion von CURSES !!! )
- ** Die Cursortasten KEY_RIGHT bzw. KEY_LEFT erzeugen BLANK (32)
- ** bzw. BACKSPACE (8).
- ** Die Funktion erwartet einen INT als Angabe, welche Werte
- ** erlaubt sind. Mögliche Angaben ( s. util.h ):
- ** ALL (1) - alle Werte erlaubt
- ** UPPER (2) - Buchstaben nur gross
- ** LOWER (3) - Buchstaben nur klein
- ** NUM (4) - Nur Zahlen, Punkt, Komma und Vorzeichen
- ** DATUM (5) - Nur Zahlen, Punkt, Schrägstrich
- ** ZEIT (6) - Nur Zahlen, Doppelpunkt, Punkt
- ** Im Fehlerfall wird jeweils NULL zurückgeliefert.
- ** Mögliche andere Sondertasten werden in dieser Version nicht
- ** ausgewertet und geben den Wert -1 zurück.
- ** Änderungen 1.00 ; 08.06.91
- ** - erste Version int editgetch(void)
- ** 1.50 ; 08.06.91
- ** - Übergabeparameter 'int form' zur Prüfung auf bestimmte
- ** Vorgaben, z.B. nur Großbuchstaben .....
- */
-
- /* Notwendige Einbindungen :
- */
- #include <stdio.h>
- #ifdef __TURBOC__
- #include <conio.h>
- #endif
- #include <ctype.h>
- #include "util.h" /* wg. KEY_... */
-
- #ifdef __TURBOC__
- int editgetch(int form)
- #else
- int editgetch(form)
- int form;
- #endif
- {
- int ch;
-
- /* Erstmal ein Zeichen holen; falls es keine Funktionstaste war
- ** wird der ASCII-Wert nach Vorgabe überprüft und evtl. zurückgegeben :
- */
- if ( ( ch = getch() ) > 0 ) {
- switch ( form ) {
- case ALL : return(ch);
- case UPPER : if ( ch > 96 && ch < 123 )
- return(toupper(ch));
- else {
- switch ( ch ) {
- case 132: return(142); /* ä */
- case 148: return(153); /* ö */
- case 129: return(154); /* ü */
- default : return(ch);
- } /* ENDE: switch(ch) */
- } /* ENDE: if(ch) */
- case LOWER : if ( ch > 64 && ch < 91 )
- return(tolower(ch));
- else {
- switch ( ch ) {
- case 142: return(132); /* Ä */
- case 153: return(148); /* Ö */
- case 154: return(129); /* Ü */
- default : return(ch);
- } /* ENDE: switch(ch) */
- } /* ENDE: if(ch) */
- case NUM : if ( ch > 47 && ch < 58 )
- return(ch);
- else {
- switch ( ch ) {
- case 8 : /* BACKSPACE */
- case 10 : /* LF */
- case 13 : /* CR */
- case 27 : /* ESCAPE */
- case 43 : /* + */
- case 44 : /* , */
- case 45 : /* - */
- case 46 : return(ch); /* . */
- default : return(0);
- } /* ENDE: switch(ch) */
- } /* ENDE: if(ch) */
- case DATUM : if ( ch > 47 && ch < 58 )
- return(ch);
- else {
- switch ( ch ) {
- case 8 : /* BACKSPACE */
- case 10 : /* LF */
- case 13 : /* CR */
- case 27 : /* ESCAPE */
- case 45 : /* - */
- case 47 : /* / */
- case 46 : return(ch); /* . */
- default : return(NULL);
- } /* ENDE: switch(ch) */
- } /* ENDE: if(ch) */
- case ZEIT : if ( ch > 47 && ch < 58 )
- return(ch);
- else {
- switch ( ch ) {
- case 8 : /* BACKSPACE */
- case 10 : /* LF */
- case 13 : /* CR */
- case 27 : /* ESCAPE */
- case 58 : /* : */
- case 46 : return(ch); /* . */
- default : return(NULL);
- } /* ENDE: switch(ch) */
- } /* ENDE: if(ch) */
- default : return(NULL);
- } /* ENDE: switch(form) */
- } /* ENDE: if(ch) */
- else {
- /* Ansonsten muß ein zweites Zeichen eingelesen werden:
- */
- ch = getch();
- switch ( ch ) {
- case KEY_IC:
- case KEY_DC:
- case KEY_HOME:
- case KEY_END:
- case KEY_PGUP:
- case KEY_PGDN:
- case KEY_UP:
- case KEY_DOWN: return( -1 );
- case KEY_LEFT: return( 8 );
- case KEY_RIGHT: return( 32 );
- default: return( -1 );
- } /* ENDE:switch(ch) */
-
- } /* ENDE:if-else(ch=getch) */
-
- } /* ENDE:editgetch() */
-
-